import time
import datetime
import threading

def worker(a_tid, a_account):
    global g_mutex
    print "Str", a_tid, datetime.datetime.now()
    for i in range(1000000):
        #g_mutex.acquire()
        a_account.deposite(1)
        #g_mutex.release()
    print "End", a_tid, datetime.datetime.now()


class Account:
    def __init__(self, a_base):
        self.m_amount = a_base
    def deposite(self, a_amount):
        self.m_amount += a_amount
    def withdraw(self, a_amount):
        self.m_amount -= a_amount

if __name__ == "__main__":
    global g_mutex
    count = 0
    dstart = datetime.datetime.now()
    print "Main Thread Start At:", dstart

    #init thread_pool
    thread_pool = []
    #init mutex
    g_mutex = threading.Lock()
    #init thread items
    acc = Account(100)
    for i in range(10):
      th = threading.Thread(target=worker, args = (i, acc))
      thread_pool.append(th)

    #start thereads one by one
    for i in range(10):
        thread_pool[i].start()

    #collect all threads
    for i in range(10):
        threading.Thread.join(thread_pool[i])
    dend = datetime.datetime.now()
    print "count=",acc,m_amount
    print "Main Thread End at :", dend, "time span", dend-dstart
        
